数据结构---图的广度优先遍历和深度优先遍历

#include<stdio.h>

#define QUEUE_MAXSIZE 30

typedef struct
{
        int Data[QUEUE_MAXSIZE];
        int head;
        int tial;
}SeqQueue;

void QueueInit(SeqQueue *Q)
{
        Q->head = Q->tail = 0;
}

int QueueIsEmpty(SeqQueue)
{
        return Q.head == Q.tail;
}

int QueueIn(SeqQueue *Q,int ch)
{
        if((Q->tail+1) % QUEUE_MAXSIZE == Q->head)
                return 0;
        Q->Data[Q->tail] = ch;
        Q->tail = (Q->tail+1) % QUEUE_MAXSIZE;
        return 1;
}

int QueueOut(SeqQueue *Q,int *ch)
{
        if(Q->head == Q->tail)
                return 0;
        *ch = Q->Data[Q->head];
        Q->head = (Q->head +1 ) % QUEUE_MAXSIZE;
        return 1;
}

void BFSM(MatrixGraph *G,int k)
{
        int i,j;
        SeqQueue Q;
        QueueInit(&Q);
        G->isTrav[k] = 1;
        printf("->%c",G->Vertex[k]);

         QueueIn(&Q,k);
        while(!QueueIsEmpty(Q))
        {
                QueueOut(&Q,&i);
                for(j=0;j<G->VertexNum;j++)
                        if(G->Edge[i][j] != MAXVALUE && !G->isTrav[j])
                        {
                                printf("->%c",G->Vertex[j]);
                                G->isTrav[j] = 1;
                                QueueIn(&Q,j);
                        }
        }

}


//广度优先遍历

void BFSTraverse(MatrixGraph *G)
{
        int i;
        for(i=0;i<G->VertexNum;i++)
                G->isTrav[i] = 0;
        for(i=0;i<G->VertexNum;i++)
                if(!G->isTrav[i])
                        BFSM(G,i);
        printf("\n");
}


//深度优先遍历

void DFSM(MatrixGraph *G,int i)
{
        int j;
        G->isTrav[i] = 1;
        printf("->%c",G->Vertex[i]);
        for(j=0;j<G->Vertexnum;j++)
         if(G->Edges[i][j] != MAXVALUE && !G->isTrav[i])
                DFSM(G,j);
}

void DFSMTraverse(MatrixGraph *G)
{
        int i;
        for(i=0;i<G->VertexNum;i++)
         G->isTrav[i] = 0;
         for(i=0;i<G->VertexNum;i++)
         if(!G->isTrav[i])
          DFSM(G,i);

        printf("\n");
}


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值